using System;

namespace Sedna.Core.Controller
{
	/// <summary>
	/// ExceptionHandlerMatcher that supports matching subclasses of SednaException by 
	/// exception code.
	/// </summary>
	public class SednaExceptionCodeBasedExceptionHandlerMatcher: SuperTypeBasedExceptionHandlerMatcher
	{
		protected override bool IsMatching(Exception exception, IExceptionHandler exceptionHandler)
		{
			SednaException sednaException=exception as SednaException;
			AbstractSednaExceptionHandler sednaExceptionHandler=exceptionHandler as AbstractSednaExceptionHandler;
			if (sednaException==null||sednaExceptionHandler==null)
			{
				return false;
			}
			if (!base.IsMatching(exception, exceptionHandler))
			{
				return false;
			}
			return sednaException.ExceptionCode==sednaExceptionHandler.ExceptionCode;
		}
	}
}
